home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PCMania 73
/
PCMania CD73_1.iso
/
pcmania
/
demosc73
/
CFADE.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1998-09-30
|
3KB
|
141 lines
{ HEY! PcManíacos: }
{ Si queréis contactar con el autor de esta sección, }
{ ahora podéis hacerlo a través de su e-mail privado: }
{ Miquel Barceló: (Demoscene) }
{ e-mail: MBarceloJ@nexo.es }
{ -------------------------------------------------------------- }
{$N+,E+}
uses dos,crt,graf;
var
mixtable : pointer;
pant1 : pointer;
pant2 : pointer;
pal1 : paleta;
pal2 : paleta;
palg : paleta;
conta : word;
Procedure Grey_scale (var pant;pal :paleta);
var
cont : word;
spant,opant : integer;
col : byte;
begin
spant:=seg(pant);
opant:=ofs(pant);
for cont:=0 to 63999 do
begin
col:=MEM[spant:opant+cont];
MEM[spant:opant+cont]:=4*(pal[col].r+pal[col].g+pal[col].b)div 3;
end;
end;
Procedure Calc_mixtable (factor: word);
var
xc,yc : word;
pos : word;
smix,omix : word;
temp : word;
begin
smix:=seg(mixtable^);
omix:=ofs(mixtable^);
pos:=0;
for yc:=0 to 255 do
begin
temp:=(256-factor)*yc;
for xc:=0 to 255 do
begin
MEM[smix:omix+pos]:=temp shr 8;
pos:=pos+1;
temp:=temp+factor;
end;
end;
end;
Procedure crossfade (var pant1, pant2);
var
cont : word;
smix,spant1,spant2,
omix,opant1,opant2 : word;
begin
smix:=seg(mixtable^);
omix:=ofs(mixtable^);
spant1:=seg(pant1);
opant1:=ofs(pant1);
spant2:=seg(pant2);
opant2:=ofs(pant2);
for cont:=0 to 63999 do
MEM[$a000:cont]:=MEM[smix:omix+(MEM[spant1:opant1+cont] shl 8)+
MEM[spant2:opant2+cont]];
end;
begin
getmem (pant1,64000);
getmem (pant2,64000);
getmem (mixtable,65535);
set_vga;
for conta:=0 to 255 do
begin
palg[conta].r:=conta shr 2;
palg[conta].g:=conta shr 2;
palg[conta].b:=conta shr 2;
end;
load_pcx('pcmania.pcx',pant1^);
getpaleta(pal1);
load_pcx('test.pcx',pant2^);
getpaleta(pal2);
flip (pant2^,vga^);
readkey;
Grey_scale(pant1^,pal1);
Grey_scale(pant2^,pal2);
putpaleta(palg);
flip (pant2^,vga^);
readkey;
repeat
conta:=0;
repeat
inc (conta);
calc_mixtable(256*conta div 50);
crossfade(pant2^,pant1^);
until (keypressed) or (conta=50);
conta:=0;
repeat
inc (conta);
calc_mixtable(256*conta div 50);
crossfade(pant1^,pant2^);
until (keypressed) or (conta=50);
until keypressed;
readkey;
set_text;
freemem (pant1,64000);
freemem (pant2,64000);
end.